package com.ssyt.yt1.day8;

/**
 * 关于String的一点小细节
 * 
 * @author Administrator
 *
 */
public class StringDemo {

	public static void main(String[] args) {
		// 栈、堆、常量池
		String str1 = new String("hello");
		// 栈、堆
		String str2 = new String("hello");
		// ==是比较的内存地址，如果要比较内容使用equals方法
		System.out.println(str1 == str2); // false
		System.out.println(str1.equals(str2)); // true

		// 栈、常量池
		String str3 = "world";
		// 栈
		String str4 = "world";
		System.out.println(str3 == str4); // true
		System.out.println(str3.equals(str4)); // true

		// JVM内部会做一个优先，在赋值之前会把所有的单个字符串拼接成一个整体的world
		String str5 = "w" + "o" + "r" + "l" + "d";
		System.out.println(str4 == str5);

		// 如果单独赋值给每一个变量，再把每个变量组合起来跟一个整体的world比较会返回false
		// String w = "w";
		// String o = "o";
		// String r = "r";
		// String l = "l";
		// String d = "d";
		// 如果单独赋值给每一个变量，并加上final，再把每个变量组合起来跟一个整体的world比较会返回true
		final String w = "w";
		final String o = "o";
		final String r = "r";
		final String l = "l";
		final String d = "d";
		System.out.println(w + o + r + l + d == str5);

		// 栈、堆、常量池
		String str6 = new String("hello world");
		// 栈
		String str7 = "hello world";
		System.out.println(str6.intern() == str7);
	}
}
